package ru.chezclif.lern.conread;

import ru.chezclif.lern.conread.enumerations.EnumPseudoProtocols;

/**
 * Класс для обработки строки "Псевдопротокол:Путь к файлу", пример - "xml://c:\Test\Settings.xml"
 * 
 * @author Vit
 * 
 */
public class PseudoProtocolParser {
	/**
	 * Перечислимые типы, указывающие каким образом считывать файл с настройками, и к какому типу они относятся
	 */
	private Enum<EnumPseudoProtocols> protocolType;
	/**
	 * Путь до оперируемого файла
	 */
	private String path = "";

	/**
	 * Из входящего параметра создаются две строки, в одной псевдо протокол, в другой путь к файлу. Устанавливается флаг на полученный тип файла
	 * настройки.
	 * 
	 * @param pseudoProtocolString строка, содержащая псевдопротокол и путь до оперируемого файла
	 */
	public void parsePseudoProtocol(String pseudoProtocolString) {
		Preconditions.notBlank(pseudoProtocolString);
		int position = -1;
		position = pseudoProtocolString.indexOf("://");
		if ((position == 0) || (position == -1)) {
			throw new ru.chezclif.lern.conread.exceptions.IncorrectStringException(pseudoProtocolString);
		}
		String protocol = pseudoProtocolString.substring(0, position);
		if (protocol.equals("xml")) {
			protocolType = EnumPseudoProtocols.XML; // parse xml with arguments "path"
		} else if (protocol.equals("ini")) {
			protocolType = EnumPseudoProtocols.INI;// parse ini with arguments "path"
		} else if (protocol.equals("props")) {
			protocolType = EnumPseudoProtocols.PROPERTIES; // parse props with arguments "path"
		} else if (protocol.equals("file")) {
			protocolType = EnumPseudoProtocols.FILE; // parse file with arguments "path"
		} else {
			throw new ru.chezclif.lern.conread.exceptions.IncorrectStringException(pseudoProtocolString);
		}
		path = pseudoProtocolString.substring(position + 3, pseudoProtocolString.length());
		if (path.equals("")) {
			throw new ru.chezclif.lern.conread.exceptions.IncorrectStringException(pseudoProtocolString);
		}
		System.out.println(protocol);
		System.out.println(path);
	}

	/**
	 * Возвращает значение флага, указывающего на тип псевдопротокола
	 * 
	 * @return возвращает флаг соответствующий псевдопротоколу
	 */
	public Enum<EnumPseudoProtocols> getProtocolType() {
		if (protocolType==null) {
			throw new ru.chezclif.lern.conread.exceptions.IncorrectStringException("Protocol is empty");
		}
		return protocolType;
	}

	/**
	 * Возвращает полный путь до файла с настройками
	 * 
	 * @return возвращает полный путь к оперируемому файлу
	 */
	public String getPath() {
		if (path.equals("")) {
			throw new ru.chezclif.lern.conread.exceptions.IncorrectStringException("Path is not exist");
		}
		return path;
	}
}
